package leetcode.code;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author : zx
 * @version V1.0
 */
public class medium_合集 {

    class Solution {

        /**
         * 在老式手机上，用户通过数字键盘输入，手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列，实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示：
         *
         *
         *
         * 示例 1:
         *
         * 输入: num = "8733", words = ["tree", "used"]
         * 输出: ["tree", "used"]
         * 示例 2:
         *
         * 输入: num = "2", words = ["a", "b", "c", "d"]
         * 输出: ["a", "b", "c"]
         * 提示：
         *
         * num.length <= 1000
         * words.length <= 500
         * words[i].length == num.length
         * num中不会出现 0, 1 这两个数字
         *
         * 来源：力扣（LeetCode）
         * 链接：https://leetcode-cn.com/problems/t9-lcci
         * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
         */
        public List<String> getValidT9Words(String num, String[] words) {
            char[] wordArray = num.toCharArray();
            List<String> res = new ArrayList<>(Arrays.asList(words));
            for(int i = 0; i < wordArray.length; i++){
                List<String> tmp = new ArrayList<>();
                for (String j : res){
                    if(wordArray[i] == '7'){
                        if(j.charAt(i) >= 'p' && j.charAt(i) <= 's') tmp.add(j);
                    }else if(wordArray[i] == '8'){
                        if(j.charAt(i) >= 't' && j.charAt(i) <= 'v') tmp.add(j);
                    }else if(wordArray[i] == '9'){
                        if(j.charAt(i) >= 'w' && j.charAt(i) <= 'z') tmp.add(j);
                    }else if((wordArray[i]-'2')*3 <= j.charAt(i)-'a' && j.charAt(i)-'a' < (wordArray[i]-'2')*3+3){
                        tmp.add(j);
                    }
                }
                res = tmp;
                if (tmp.size() == 0) return res;
            }
            return res;
        }
    }
}
